// 抽象类:包含抽象方法(抽象方法一般没有任何具体内容的实现),也可以包含实例方法,抽象类是不能被实例化,为了让子类进行实例化实现内部的抽象方法
// 抽象类的目的或者作用最终都是为子类服务的
;
(() => {
    // 定义一个抽象类
    class Animal {
        sayHi() {
            console.log('哈哈哈哈');
        }
    }
    // 定义一个子类(派生类)Dog
    class Dog extends Animal {
        constructor() {
            super(...arguments);
            // 重新的实现抽象类中的方法,此时这个方法就是当前Dog类的实例方法了
            this.name = '小狗';
        }
        eat() {
            console.log('heheheheh');
        }
    }
    const dog = new Dog();
    dog.eat();
    dog.sayHi();
    console.log(dog);
    // 不能实例化抽象类对象
    // const ani:Animal = new Animal()
})();
